<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// 面向对象编程：
// 面向对象 OO -> Object Oriented
// 面向对象分析 OOA -> Object Oriented Analysis
// 面向对象设计 OOD -> Object Oriented Design
// 面向对象编程 OOP -> Object Oriented Programing

// 面向对象编程的核心概念：类和对象
// 在JS中的类就是构造函数
// 对象是类的一个实例

// 对象的抽象就是类
// 类的具体实例就是对象

// 两个概念上的区别：
var name = '海静';// 变量
function say(){// 函数
    console.log( 'hi' )
}
var obj1 = {
    name: '张三',// 属性
    say: function (){// 方法
        console.log( 'hi' )
    }
}
// 1.变量和属性
// 变量是自由的，属性是属于对象的，是与对象相关的数据

// 2.函数和方法
// 函数是自由的，方法是属于对象的，是与对象相关的函数


// 面向对象编程的关键是：创建对象

// 1.直接赋值{}或使用Object构造函数创建对象
var obj1 = {};
obj1.name = '李四';
obj1.sex = '女';
obj1.say = function (){
    console.log( 'hi' );
}

var obj2 = new Object();
obj2.name = '王五';
obj2.sex = '男';
obj2.say = function (){
    console.log( 'hi' );
}

var obj3 = {
    name: '马六',
    sex: '女',
    say: function (){
        console.log( 'hi' );
    }
}

var obj4 = {
    name: '小白',// 小狗
    sex: '公',
    say: function (){
        console.log( '汪汪' );
    }
}

// constructor属性，指向创建对象的构造函数（类）
console.log( obj1.constructor );// Object
console.log( obj2.constructor );// Object
console.log( obj3.constructor );// Object
console.log( obj4.constructor );// Object
console.log( obj1.say === obj2.say );// false

// 问题1：如果需要大批量创建对象，需要写大量重复的代码
// 问题2：无法区分对象的类型（分类：人类和狗类）
// 问题3：相同类型对象的相同方法，重复创建了（代码重复，占用更多内存）



</script>
</body>
</html>